<!DOCTYPE html>
<html lang="en-us" dir="ltr">
    <head><meta charset='utf-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'><meta name='description' content='cpp返回值和传参的区别 cpp的继承,重载,重写,多态 conan使用 拉取社区版conan仓库镜像 docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:latest
qmake的学习与使用 创建 项目名.pro文件 将在不同平台生成不同的可执行文件 生成makefile文件 qmake -o Makefile hello.pro
1 2 3 4 5 6 7 8 9 10 # 使用空格分隔源码 SOURCES = hello.cpp main.cpp # 使用反斜杠分割头文件 HEADERS = hello.h \ hello2.h # 使用&#43;=列出多条 配置信息 # qt代表使用qt编写 # warn_on部分告诉qmake要把编译器设置为输出警告信息的 # release发布程序 debug调试程序 CONFIG &#43;= qt warn_on release cmake学习与使用 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 cmake_minimum_required(VERSION 3.'><title>C/CPP</title>

<link rel='canonical' href='http://meruro.cn/p/c/cpp/'>

<link rel="stylesheet" href="/scss/style.min.5a8e892f6fa14515e9065eee1f5d2e05302606ec7f11750b2fb95198f9cdcbfd.css"><meta property='og:title' content='C/CPP'>
<meta property='og:description' content='cpp返回值和传参的区别 cpp的继承,重载,重写,多态 conan使用 拉取社区版conan仓库镜像 docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:latest
qmake的学习与使用 创建 项目名.pro文件 将在不同平台生成不同的可执行文件 生成makefile文件 qmake -o Makefile hello.pro
1 2 3 4 5 6 7 8 9 10 # 使用空格分隔源码 SOURCES = hello.cpp main.cpp # 使用反斜杠分割头文件 HEADERS = hello.h \ hello2.h # 使用&#43;=列出多条 配置信息 # qt代表使用qt编写 # warn_on部分告诉qmake要把编译器设置为输出警告信息的 # release发布程序 debug调试程序 CONFIG &#43;= qt warn_on release cmake学习与使用 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 cmake_minimum_required(VERSION 3.'>
<meta property='og:url' content='http://meruro.cn/p/c/cpp/'>
<meta property='og:site_name' content='梅鲁梅鲁梅鲁梅~'>
<meta property='og:type' content='article'><meta property='article:section' content='Post' /><meta property='article:tag' content='代码' /><meta property='article:published_time' content='2018-03-18T22:00:07&#43;00:00'/><meta property='article:modified_time' content='2018-03-18T22:00:07&#43;00:00'/>
<meta name="twitter:title" content="C/CPP">
<meta name="twitter:description" content="cpp返回值和传参的区别 cpp的继承,重载,重写,多态 conan使用 拉取社区版conan仓库镜像 docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:latest
qmake的学习与使用 创建 项目名.pro文件 将在不同平台生成不同的可执行文件 生成makefile文件 qmake -o Makefile hello.pro
1 2 3 4 5 6 7 8 9 10 # 使用空格分隔源码 SOURCES = hello.cpp main.cpp # 使用反斜杠分割头文件 HEADERS = hello.h \ hello2.h # 使用&#43;=列出多条 配置信息 # qt代表使用qt编写 # warn_on部分告诉qmake要把编译器设置为输出警告信息的 # release发布程序 debug调试程序 CONFIG &#43;= qt warn_on release cmake学习与使用 示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 cmake_minimum_required(VERSION 3.">
    </head>
    <body class="
    article-page
    ">
    <script>
        (function() {
            const colorSchemeKey = 'StackColorScheme';
            if(!localStorage.getItem(colorSchemeKey)){
                localStorage.setItem(colorSchemeKey, "auto");
            }
        })();
    </script><script>
    (function() {
        const colorSchemeKey = 'StackColorScheme';
        const colorSchemeItem = localStorage.getItem(colorSchemeKey);
        const supportDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches === true;

        if (colorSchemeItem == 'dark' || colorSchemeItem === 'auto' && supportDarkMode) {
            

            document.documentElement.dataset.scheme = 'dark';
        } else {
            document.documentElement.dataset.scheme = 'light';
        }
    })();
</script>
<div class="container main-container flex on-phone--column extended"><aside class="sidebar left-sidebar sticky ">
    <button class="hamburger hamburger--spin" type="button" id="toggle-menu" aria-label="Toggle Menu">
        <span class="hamburger-box">
            <span class="hamburger-inner"></span>
        </span>
    </button>

    <header>
        
            
            <figure class="site-avatar">
                <a href="/">
                
                    
                    
                    
                        
                        <img src="/img/ava_hu31add2dceb44736f969f74989490346b_19511_300x0_resize_q75_box.jpg" width="300"
                            height="300" class="site-logo" loading="lazy" alt="Avatar">
                    
                
                </a>
                
                    <span class="emoji">🍥</span>
                
            </figure>
            
        
        
        <div class="site-meta">
            <h1 class="site-name"><a href="/">梅鲁梅鲁梅鲁梅~</a></h1>
            <h2 class="site-description">朝闻道,夕死可矣.</h2>
        </div>
    </header><ol class="social-menu">
            
                <li>
                    <a 
                        href='https://github.com/CaiJimmy/hugo-theme-stack'
                        target="_blank"
                        title="GitHub"
                    >
                        
                        
                            <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  <path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" />
</svg>



                        
                    </a>
                </li>
            
                <li>
                    <a 
                        href='https://twitter.com'
                        target="_blank"
                        title="Twitter"
                    >
                        
                        
                            <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-twitter" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  <path d="M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c-.002 -.249 1.51 -2.772 1.818 -4.013z" />
</svg>



                        
                    </a>
                </li>
            
        </ol><ol class="menu" id="main-menu">
        
        
        

        <li >
            <a href='/' >
                
                
                
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-home" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <polyline points="5 12 3 12 12 3 21 12 19 12" />
  <path d="M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7" />
  <path d="M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6" />
</svg>



                
                <span>Home</span>
            </a>
        </li>
        
        

        <li >
            <a href='/about/' >
                
                
                
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-user" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <circle cx="12" cy="7" r="4" />
  <path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" />
</svg>



                
                <span>About</span>
            </a>
        </li>
        
        

        <li >
            <a href='/archives/' >
                
                
                
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-archive" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <rect x="3" y="4" width="18" height="4" rx="2" />
  <path d="M5 8v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-10" />
  <line x1="10" y1="12" x2="14" y2="12" />
</svg>



                
                <span>Archives</span>
            </a>
        </li>
        
        

        <li >
            <a href='/search/' >
                
                
                
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-search" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <circle cx="10" cy="10" r="7" />
  <line x1="21" y1="21" x2="15" y2="15" />
</svg>



                
                <span>Search</span>
            </a>
        </li>
        
        

        <li >
            <a href='/links/' >
                
                
                
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-link" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <path d="M10 14a3.5 3.5 0 0 0 5 0l4 -4a3.5 3.5 0 0 0 -5 -5l-.5 .5" />
  <path d="M14 10a3.5 3.5 0 0 0 -5 0l-4 4a3.5 3.5 0 0 0 5 5l.5 -.5" />
</svg>



                
                <span>Links</span>
            </a>
        </li>
        

        <div class="menu-bottom-section">
                <li id="i18n-switch">  
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-language" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z" fill="none"/>
  <path d="M4 5h7" />
  <path d="M9 3v2c0 4.418 -2.239 8 -5 8" />
  <path d="M5 9c-.003 2.144 2.952 3.908 6.7 4" />
  <path d="M12 20l4 -9l4 9" />
  <path d="M19.1 18h-6.2" />
</svg>



                    <select name="language" onchange="window.location.href = this.selectedOptions[0].value">
                        
                            <option value="http://meruro.cn/" selected>English</option>
                        
                            <option value="http://meruro.cn/zh-cn/" >中文</option>
                        
                            <option value="http://meruro.cn/ar/" >عربي</option>
                        
                    </select>
                </li>
            
            
            
                <li id="dark-mode-toggle">
                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-toggle-left" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <circle cx="8" cy="12" r="2" />
  <rect x="2" y="6" width="20" height="12" rx="6" />
</svg>



                    <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-toggle-right" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <circle cx="16" cy="12" r="2" />
  <rect x="2" y="6" width="20" height="12" rx="6" />
</svg>



                    <span>Dark Mode</span>
                </li>
            
        </div>
    </ol>
</aside>
<main class="main full-width">
    <article class="main-article">
    <header class="article-header">

    <div class="article-details">
    

    <div class="article-title-wrapper">
        <h2 class="article-title">
            <a href="/p/c/cpp/">C/CPP</a>
        </h2>
    
        
    </div>

    
    <footer class="article-time">
        
            <div>
                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-calendar-time" width="56" height="56" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <path d="M11.795 21h-6.795a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v4" />
  <circle cx="18" cy="18" r="4" />
  <path d="M15 3v4" />
  <path d="M7 3v4" />
  <path d="M3 11h16" />
  <path d="M18 16.496v1.504l1 1" />
</svg>
                <time class="article-time--published">Mar 18, 2018</time>
            </div>
        

        
            <div>
                <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-clock" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <circle cx="12" cy="12" r="9" />
  <polyline points="12 7 12 12 15 15" />
</svg>



                <time class="article-time--reading">
                    5 minute read
                </time>
            </div>
        
    </footer>
    

    
</div>
</header>

    <section class="article-content">
    
    
    <h2 id="cpp返回值和传参的区别">cpp返回值和传参的区别</h2>
<h2 id="cpp的继承重载重写多态">cpp的继承,重载,重写,多态</h2>
<h2 id="conan使用">conan使用</h2>
<p>拉取社区版conan仓库镜像
docker pull releases-docker.jfrog.io/jfrog/artifactory-oss:latest</p>
<h2 id="qmake的学习与使用">qmake的学习与使用</h2>
<p>创建 项目名.pro文件 将在不同平台生成不同的可执行文件
生成makefile文件 qmake -o Makefile hello.pro</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># 使用空格分隔源码</span>
</span></span><span class="line"><span class="cl"><span class="nv">SOURCES</span> <span class="o">=</span> hello.cpp main.cpp
</span></span><span class="line"><span class="cl"><span class="c1"># 使用反斜杠分割头文件</span>
</span></span><span class="line"><span class="cl"><span class="nv">HEADERS</span> <span class="o">=</span> hello.h <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>	hello2.h
</span></span><span class="line"><span class="cl"><span class="c1"># 使用+=列出多条 配置信息</span>
</span></span><span class="line"><span class="cl"><span class="c1"># qt代表使用qt编写</span>
</span></span><span class="line"><span class="cl"><span class="c1"># warn_on部分告诉qmake要把编译器设置为输出警告信息的</span>
</span></span><span class="line"><span class="cl"><span class="c1"># release发布程序 debug调试程序</span>
</span></span><span class="line"><span class="cl"><span class="nv">CONFIG</span> <span class="o">+=</span> qt warn_on release
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="cmake学习与使用">cmake学习与使用</h2>
<p>示例代码</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">cmake_minimum_required<span class="o">(</span>VERSION 3.20<span class="o">)</span>
</span></span><span class="line"><span class="cl">​
</span></span><span class="line"><span class="cl">project<span class="o">(</span>CMK-Hello
</span></span><span class="line"><span class="cl">        VERSION 0.0.1
</span></span><span class="line"><span class="cl">        DESCRIPTION <span class="s2">&#34;A Test Project&#34;</span>
</span></span><span class="line"><span class="cl">        LANGUAGES CXX
</span></span><span class="line"><span class="cl"><span class="o">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># set language std</span>
</span></span><span class="line"><span class="cl">set<span class="o">(</span>CMAKE_CXX_STANDARD 17<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># set language std and Disable fallback to a previous version</span>
</span></span><span class="line"><span class="cl">set<span class="o">(</span>CMAKE_CXX_STANDARD_REQUIRED ON<span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Disable CXX Syntax EXTENSIONS</span>
</span></span><span class="line"><span class="cl">set<span class="o">(</span>CMAKE_CXX_EXTENSIONS OFF<span class="o">)</span>
</span></span><span class="line"><span class="cl">​
</span></span><span class="line"><span class="cl">​
</span></span><span class="line"><span class="cl">set<span class="o">(</span>STATIC_HEADER <span class="s2">&#34;include/static/&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">add_library<span class="o">(</span>myLib STATIC src/STD_Suggestion.cpp <span class="si">${</span><span class="nv">STATIC_HEADER</span><span class="si">}</span>STD_Suggestion.h<span class="o">)</span>
</span></span><span class="line"><span class="cl">​
</span></span><span class="line"><span class="cl"><span class="c1"># for #include &#34;static/Suggestion.h&#34;</span>
</span></span><span class="line"><span class="cl">target_include_directories<span class="o">(</span>myLib
</span></span><span class="line"><span class="cl">    INTERFACE
</span></span><span class="line"><span class="cl">        include/
</span></span><span class="line"><span class="cl"><span class="o">)</span>
</span></span><span class="line"><span class="cl">​
</span></span><span class="line"><span class="cl">set<span class="o">(</span>SOURCES
</span></span><span class="line"><span class="cl">    src/hello.cpp
</span></span><span class="line"><span class="cl"><span class="o">)</span>
</span></span><span class="line"><span class="cl">​
</span></span><span class="line"><span class="cl">add_executable<span class="o">(</span>HelloExe <span class="si">${</span><span class="nv">SOURCES</span><span class="si">}</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">​
</span></span><span class="line"><span class="cl">target_link_libraries<span class="o">(</span>HelloExe
</span></span><span class="line"><span class="cl">    PRIVATE
</span></span><span class="line"><span class="cl">        myLib
</span></span><span class="line"><span class="cl"><span class="o">)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><pre><code>指令和参数组成,指令大小写不相关,参数大小写相关,参数使用空格或分号分隔开
重要指令
set(HELLO hello.cpp) # set设置变量指令 变量使用${HELLO}的方式取值,在if控制语句中直接使用变量名

cmake_minimum_required(VERSION 2.8.3)  #指定cmake最小版本要求

project(CMK-Hello) #指定工程名

include_directories(./include ..) # 向工程添加多个头文件搜索路径,相当于g++中-I参数

link_directories(./lib) # 添加库文件搜索路径

add_library(hello SHARE ${SRC}) # 生成库文件参数libname [SHARE|STATIC|MODULE](指定动态或静态) source1 source2
此命令将生成libhello.so文件

add_complie_options(-Wall -std=c++11 -O2) # 添加编译参数

add_executable(hello main.cpp ${HELLO}) # 生成可执行文件

target_link_library() #添加链接库,相同于指定-l参数
</code></pre>
<h2 id="g编译器">g++编译器</h2>
<pre><code>预处理 g++ -E test.cpp -o test.i  # (-o为定义输出文件名 将宏文件头文件等展开,消除注释等)
编译  g++ -S test.i -o test.s  #(生成汇编文件)
汇编  g++ -C test.s -o test.o  #生成机器码
链接  g++ test.o -o test  # 等价于g++ test.cpp -o test
一些参数
-g 增加调试信息
-O2 优化源代码 g++ -O2 test.cpp
-I 指定头文件目录
-Wall 输出警告信息

使用cmake
先用用cmake path(cmakelists.txt所在目录),在执行命令目录创建makefile文件, 再在执行目录使用make命令生成可执行文件
</code></pre>
<h3 id="生成库文件并编译">生成库文件并编译</h3>
<pre><code>静态库（库程序是直接注入目标程序的，不分彼此，库文件通常以.a结尾）
先使用汇编生成.o文件,再使用ar rs命令
g++ -C test.cpp 
ar rs libtest.a test.o # 把test.o二进制文件归档为libtest.a静态库文件 运行时使用-l test进行链接
动态库（库程序是在运行目标程序时（中）加载的，库文件通常以.so结尾）
g++ test.cpp -c -shared -o libtest.so
运行动态库文件要指定LD_LIBRARY_PATH=src main_test(可执行文件名)
</code></pre>
<h2 id="反编译">反编译</h2>
<pre><code>打开任意界面，按住alt+A键打开ASCII string style窗口
点击set default encodings 在弹出框中选择8-bit的change 选择utf-8后点击ok回到c语言界面按f5刷新一下界面 乱码问题解决
修改完后Edit/Patch program/Apply patches to input file保存修改后的文件，运行便能得到flag。
</code></pre>
<h2 id="gdb调试器">gdb调试器</h2>
<pre><code>g++ test.cpp -g # 加-g后才可以被调试
</code></pre>
<h2 id="vscode的使用">vscode的使用</h2>
<pre><code>格式化ctrl shift i
配置launch.json 主要是以下两个配置:
&quot;program&quot;: &quot;${fileDirname}\\${fileBasenameNoExtension}.exe&quot;,  #定义可执行文件位置
&quot;args&quot;: []  # 定义可执行文件需要的参数
&quot;cwd&quot;: &quot;${workspaceFolder}&quot;  #表示当前目录
&quot;preLaunchTask&quot;: &quot;C/C++: g++.exe 生成活动文件&quot;  #定义task

task.json中的主要配置:
&quot;label&quot;:&quot;和perLaunchTask后的字符串相对应&quot;
&quot;command&quot;: &quot;D:\\software\\mingw64\\bin\\g++.exe&quot;, #定义g++命令位置
&quot;args&quot;: [&quot;-g&quot;,&quot;${file}&quot;,&quot;-o&quot;,&quot;name&quot;]  #定义参数,但默认只能处理单文件

实际使用中需要修改task.json以自动执行cmake命令
修改后的task.json:
</code></pre>
<h2 id="基本语法">基本语法</h2>
<pre><code>长短浮双布尔茶,for循初始条件加,while小括加大括(for也是),
typeof()类型, sizeof()所占字节数
字符串操作
String a = “hahhaha”;
a+=”1231231”;
声明动态数组
int n;
	int m;
	int *Array1;  //声明一维动态数组
	Array1=new int(n);  //为一维动态数组分配空间，元素个数为n
强制类型转换
int i=0
Char ch = char(i);	c++风格
cout尖左in尖右
define const定常量
点访成员指箭头,
</code></pre>
<h2 id="变量及类型">变量及类型</h2>
<pre><code>变量只是一个字符串,在编译器中存储

左值（lvalue）：指向内存位置的表达式被称为左值表达式。左值可以出现在赋值号的左边或右边。
右值（rvalue）：指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式

typedef int feet; //别名
feet a; 等价于 int a;

定义全局变量时，系统会自动初始化为一个值
</code></pre>
<h2 id="常量两种方式">常量(两种方式)</h2>
<pre><code>#define LIGHT 10

const int LIGHT = 10;
</code></pre>
<h2 id="存储类">存储类</h2>
<pre><code>regedit 定义在寄存器中的局部变量
strtic 定义静态变量,当 static 修饰全局变量时，会使变量的作用域限制在声明它的文件内。
类数据成员上时，会导致仅有一个该成员的副本被类的所有对象共享。(公用这一个变量)
利用extern引用另一个文件的全局变量或者函数,(可以在多个文件共享的全局变量)
mutable 说明符仅适用于类的对象，这将在本教程的最后进行讲解。它允许对象的成员替代常量。也就是说，mutable 成员可以通过 const 成员函数修改。
thread_local int x;  // 线程结束时销毁的变量
</code></pre>
<h2 id="枚举类">枚举类</h2>
<pre><code>enum 枚举名{ 
 标识符[=整型常数], 
 标识符[=整型常数], 
... 
标识符[=整型常数]
} 枚举变量;

enum color { red, green=5, blue } c;
在这里，blue 的值为 6，因为默认情况下，每个名称都会比它前面一个名称大 1，但 red 的值依然为 0。
</code></pre>
<h2 id="运算符">运算符</h2>
<pre><code>* 指针 指向一个变量
&amp; 取地址 取一个变量的地址
Cast 强制转换 
() ? (X):(Y)
箭头（-&gt;）：左边必须为指针；
点号（.）：左边必须为实体。
双冒号:: 访问类成员变量或函数,不需要实例化
</code></pre>
<h2 id="lambda">Lambda</h2>
<pre><code>[capture](parameters)-&gt;return-type{body}

[](int x, int y) -&gt; int { int z = x + y; return z + x; }
</code></pre>
<h2 id="指针">指针</h2>
<pre><code>指针是一个变量，其值为另一个变量的地址, 声明指针时同样需要声明它的类型 type , 此类型代表指针地址存储数据的类型
int  var = 20;   // 实际变量的声明
int  *ip;        // 指针变量的声明
ip = &amp;var;       // 在指针变量中存储 var 的地址
ip 是一个地址, *ip是其中的值
C++ Null 指针	C++ 支持空指针。NULL 指针是一个定义在标准库中的值为零的常量。
C++ 指针的算术运算	可以对指针进行四种算术运算：++、--、+、-
C++ 指针 vs 数组	指针和数组之间有着密切的关系。
C++ 指针数组	可以定义用来存储指针的数组。
C++ 指向指针的指针	C++ 允许指向指针的指针。
C++ 传递指针给函数	通过引用或地址传递参数，使传递的参数在调用函数中被改变。
C++ 从函数返回指针	C++ 允许函数返回指针到局部变量、静态变量和动态内存分配。
</code></pre>
<h2 id="引用">引用</h2>
<pre><code>试想变量名称是变量附属在内存位置中的标签，您可以把引用当成是变量附属在内存位置中的第二个标签。因此，您可以通过原始变量名称或引用来访问变量的内容
int&amp;  r = i;
C++ 支持把引用作为参数传给函数，这比传一般的参数更安全, 使用参数的引用代替原来的变量
可以从 C++ 函数中返回引用，就像返回其他数据类型一样。
</code></pre>
<h2 id="c面向对象">c++面向对象</h2>
<ol>
<li>类语法
class classname
{
public:
double getArea(void){
return length*wight;
}
private:
double length;   // 盒子的长度
double wight;
};</li>
<li>对象语法: 
classname box;</li>
<li>继承语法: 
class derived-class: access-specifier base-class {}
其中，访问修饰符 access-specifier 是 public、protected 或 private 其中的一个，base-class 是之前定义过的某个类的名称。如果未使用访问修饰符 access-specifier，则默认为 
子类不继承父类的构造方法</li>
<li>函数重载
在同一个作用域内，可以声明几个功能类似的<strong>同名函数</strong>，但是这些同名函数的形式参数（指参数的个数、类型或者顺序）必须不同。您不能仅通过返回类型的不同来重载函数。</li>
</ol>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl">   <span class="k">class</span> <span class="nc">printData</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">   <span class="k">public</span><span class="o">:</span>
</span></span><span class="line"><span class="cl">      <span class="kt">void</span> <span class="n">print</span><span class="p">(</span><span class="kt">int</span> <span class="n">i</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;整数为: &#34;</span> <span class="o">&lt;&lt;</span> <span class="n">i</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl">      <span class="kt">void</span> <span class="nf">print</span><span class="p">(</span><span class="kt">double</span>  <span class="n">f</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;浮点数为: &#34;</span> <span class="o">&lt;&lt;</span> <span class="n">f</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl">      <span class="kt">void</span> <span class="nf">print</span><span class="p">(</span><span class="kt">char</span> <span class="n">c</span><span class="p">[])</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;字符串为: &#34;</span> <span class="o">&lt;&lt;</span> <span class="n">c</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">};</span>
</span></span></code></pre></td></tr></table>
</div>
</div><ol start="5">
<li>
<p>运算符重载
语法<code>Box operator+(const Box&amp;, const Box&amp;);</code>必须在函数名后加上需要重载的运算符 operator为固定单词,后跟需要重载的运算符
实现将两个box对象相加,返回一个box对象的效果</p>
</li>
<li>
<p>多态</p>
<p>= 0 告诉编译器，函数没有主体，上面的虚函数是纯虚函数。用虚函数方便继承</p>
</li>
</ol>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl"><span class="c1">// pure virtual function
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="k">virtual</span> <span class="kt">int</span> <span class="nf">area</span><span class="p">()</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="构造函数和析构函数">构造函数和析构函数</h2>
<p><em>析构函数</em>
类的析构函数是类的一种特殊的成员函数，它会在每次删除所创建的对象时执行。他们都与类名相同
Line();      // 这是构造函数声明
~Line();    // 这是析构函数声明</p>
<p><em>构造函数</em></p>
<pre><code>在C++中，当创建一个对象时，编译器要保证调用了所有父对象的构造函数，这是C++强制要求的，也是它的一个机制。
现在有一个派生类A，它继承基类B。现在问题是：使用A类创建一个对象后，怎样初始化它从类B中继承过来的数据成员？（子类是无法继承父类的构造函数和析构函数的）。总结下：因为初始化列表中无法直接初始化基类的数据成员，所以你需要在列表中指定基类的构造函数，如果不指定，编译器则会调用基类的默认构造函数。
</code></pre>
<h2 id="命名空间">命名空间</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c++" data-lang="c++"><span class="line"><span class="cl">	<span class="k">using</span> <span class="n">std</span><span class="o">::</span><span class="n">cout</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="kt">int</span> <span class="nf">main</span> <span class="p">(){</span>
</span></span><span class="line"><span class="cl">	<span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">&#34;std::endl is used with std!&#34;</span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li>输出std::endl is used with std!</li>
</ul>
<h3 id="stdmap和stdunordered_map">std::map和std::unordered_map</h3>
<pre><code>map为红黑树,O(logN), std::unordered_map哈希表
</code></pre>
<h3 id="list和vetor的区别">list和vetor的区别</h3>
<pre><code>list是双向链表,vetor是数组

（1）vector&lt;int&gt; a(10); //定义了10个整型元素的向量（尖括号中为元素类型名，它可以是任何合法的数据类型），但没有给出初值，其值是不确定的。
（2）vector&lt;int&gt; a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
（3）vector&lt;int&gt; a(b); //用b向量来创建a向量，整体复制性赋值
（4）vector&lt;int&gt; a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个（共3个）元素
（5）int b[7]={1,2,3,4,5,9,8};vector&lt;int&gt; a(b,b+7); //从数组中获得初值

list() //声明一个空列表；
list(n) //声明一个有n个元素的列表，每个元素都是由其默认构造函数T()构造出来的
list(n,val) //声明一个由n个元素的列表，每个元素都是由其复制构造函数T(val)得来的
list(n,val) //声明一个和上面一样的列表
list(first,last) //声明一个列表，其元素的初始值来源于由区间所指定的序列中的元素
//1. list中的操作：================
begin()和end();//通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator，可以调用list容器的 end() 函数来得到list末端下一位置，相当于：int a[n]中的第n+1个位置a[n]，实际上是不存在的，不能访问，经常作为循环结束判断结束条件使用。
push_back() 和push_front();//使用list的成员函数push_back和push_front插入一个元素到list中。其中push_back()从list的末端插入，而 push_front()实现的从list的头部插入。
empty();//利用empty() //判断list是否为空。
resize();////如果调用resize(n)将list的长度改为只容纳n个元素，超出的元素将被删除，如果需要扩展那么调用默认构造函数T()将元素加到list末端。如果调用resize(n,val)，则扩展元素要调用构造函数T(val)函数进行元素构造，其余部分相同。
clear();//清空list中的所有元素。
front()和back(); //通过front()可以获得list容器中的头部元素，通过back()可以获得list容器的最后一个元素。但是有一点要注意，就是list中元素是空的时候，这时候调用front()和back()会发生什么呢？实际上会发生不能正常读取数据的情况，但是这并不报错，那我们编程序时就要注意了，个人觉得在使用之前最好先调用empty()函数判断list是否为空。
pop_back和pop_front()//通过删除最后一个元素，通过pop_front()删除第一个元素；序列必须不为空，如果当list为空的时候调用pop_back()和pop_front()会使程序崩掉。
assign();//具体和vector中的操作类似，也是有两种情况，第一种是：l1.assign(n,val)将 l1中元素变为n个T(val）。第二种情况是：l1.assign(l2.begin(),l2.end())将l2中的从l2.begin()到l2.end()之间的数值赋值给l1。
swap();//交换两个链表(两个重载)，一个是l1.swap(l2); 另外一个是swap(l1,l2)，都可能完成连个链表的交换。
reverse()//通过reverse()完成list的逆置。
merge();//合并两个链表并使之默认升序(也可改)，l1.merge(l2，greater&lt;int&gt;()); 调用结束后l2变为空，l1中元素包含原来l1 和 l2中的元素，并且排好序，升序。其实默认是升序，greater&lt;int&gt;()可以省略，另外greater&lt;int&gt;()是可以变的，也可以不按升序排列。 
</code></pre>
<h2 id="vector迭代器失效的几种情况">vector迭代器失效的几种情况</h2>
<p>== vector迭代器的几种失效的情况==
1.当插入（push_back）一个元素后，end操作返回的迭代器肯定失效。</p>
<p>2.当插入(push_back)一个元素后，capacity返回值与没有插入元素之前相比有改变，则需要重新加载整个容器，此时first和end操作返回的迭代器都会失效。</p>
<p>3.当进行删除操作（erase，pop_back）后，指向删除点的迭代器全部失效；指向删除点后面的元素的迭代器也将全部失效。</p>
<p>迭代器的几种失效的情况
1.vector、deque，该数据结构分配在连续的内存中，当删除一个元素后，内存中的数据会发生移动以保证数据的紧凑。所以删除一个元素后，其他数据的地址发生了变化，之前获取的迭代器根据原有信息就访问不到正确的数据
解决方法：erase返回下一个有效迭代器的值</p>
<p>2.map、set、multiset、map、multimap，树形数据结构。以红黑树或者平衡二叉树组织数据，虽然删除了一个元素，整棵树也会调整，以符合红黑树或者二叉树的规范，但是单个节点在内存中的地址没有变化，变化的是各节点之间的指向关系。删除一个结点不会对其他结点造成影响。
erase迭代器只是被删元素的迭代器失效。</p>
<p>3.list，链表型数据结构。双向链表，使用不连续分配的内存，删除运算使指向删除位置的迭代器失效，不会使其他迭代器失效。</p>
<h2 id="冒号的用法">冒号的用法</h2>
<p>冒号（:）用法</p>
<p>（1）表示机构内位域的定义（即该变量占几个bit空间）</p>
<p>typedef struct _XXX{
unsigned char a:4;
unsigned char c;
} ; XXX
（2）构造函数后面的冒号起分割作用，是类给成员变量赋值的方法，初始化列表，更适用于成员变量的常量const型。
struct _XXX{
_XXX() : y(0xc0) {}
};
（3）public:和private:后面的冒号，表示后面定义的所有成员都是公有或私有的，直到下一个&quot;public:”或&quot;private:”出现为止。&ldquo;private:&ldquo;为默认处理。
（4）类名冒号后面的是用来定义类的继承。
class 派生类名 : 继承方式 基类名
{
派生类的成员
};
继承方式：public、private和protected，默认处理是public。
下面重点讲一下构造函数后的（：）</p>
<p>构造函数后加冒号是初始化表达式：
有四种情况下应该使用初始化表达式来初始化成员：
1：初始化const成员
2：初始化引用成员
3：当调用基类的构造函数，而它拥有一组参数时</p>
<p>4：当调用成员类的构造函数，而它拥有一组参数时。</p>
<p>在程序中定义变量并初始化的机制中,有两种形式,一个是我们传统的初始化的形式,即赋值运算符赋值,还有一种是括号赋值,如:</p>
<p>　　int a=10; 
　  char b=&lsquo;r&rsquo;;//赋值运算符赋值 
　  int a(10);/ 
　  char b(&lsquo;r&rsquo;);//括号赋值 
以上定义并初始化的形式是正确的,可以通过编译,但括号赋值只能在变量定义并初始化中,不能用在变量定义后再赋值，</p>
<p>冒号初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值，就是说初始化这个数据成员此时函数体还未执行。 对于在函数中初始化,是在所有的数据成员被分配内存空间后才进行的。这样是有好处的,有的数据成员需要在构造函数调入之后函数体执行之前就进行初始化如引用数据成员,常量数据成员和对象数据成员</p>
<p>class student
　　{public :
　　　 student ()
　　　　　.
　　　　　.
　　　　　.
　　　 protected:
　　　 const int a;
　　　 int &amp;b;</p>
<p>　　}
　 student ::student (int i,int j)
　{
　　　 a=i;
　　　 b=j;
　 } 
在Student类中有两个数据成员,一个是常量数据成员,一个是引用数据成员,并且在构造函数中初始化了这两个数据成员，但是这并不能通过编译，因为常量初始化时必须赋值，它的值是不能再改变的,与常量一样引用初始化也需要赋值，定义了引用后，它就和引用的目标维系在了一起,也是不能再被赋值的。所以C  ++&rdquo;:&ldquo;后初始化的机制,使引用和常量数据成员变为可能的，Student类的构造函数应为:  student ::student(int i,int j):a(i),b(j){}
常见的三种情况</p>
<p>1、对含有对象成员的对象进行初始化，例如，
类line有两个私有对象成员startpoint、endpoint,line的构造函数写成：
line（int sx,int sy,int ex,int ey）：startpoint（sx,sy），endpoint（ex,ey）{……}
初始化时按照类定义中对象成员的顺序分别调用各自对象的构造函数，再执行自己的构造函数
2、对于不含对象成员的对象，初始化时也可以套用上面的格式，例如，
类rectangle有两个数据成员length、width,其构造函数写成：
rectangle（）：length（1），width（2）{}
rectangle（int x,int y）：length（x），width（y）{}
3、对父类进行初始化，例如，
CDlgCalcDlg的父类是MFC类CDialog,其构造函数写为：
CDlgCalcDlg（CWnd* pParent ）： CDialog（CDlgCalcDlg::IDD, pParent）
其中IDD是一个枚举元素，标志对话框模板的ID
使用初始化成员列表对对象进行初始化，有时是必须的，有时是出于提高效率的考虑</p>
<p>双冒号（::）用法</p>
<p>1）表示“域操作符”
例：声明了一个类A，类A里声明了一个成员函数void f()，但没有在类的声明里给出f的定义，那么在类外定义f时， 
就要写成void A::f()，表示这个f()函数是类A的成员函数。
2）直接用在全局函数前，表示是全局函数 
例：在VC里，你可以在调用API 函数里，在API函数名前加：：
3）表示引用成员函数及变量，作用域成员运算符
例：System::Math::Sqrt() 相当于System.Math.Sqrt()
VC中如下
::是C++里的“作用域分解运算符”。比如声明了一个类A，类A里声明了一个成员函数voidf()，但没有在类的声明里给出f的定义，那么在类外定义f时，就要写成voidA::f()，表示这个f()函数是类A的成员函数。
　　:: 一般还有一种用法，就是直接用在全局函数前，表示是全局函数。当类的成员函数跟类外的一个全局函数同名时，考试,大提示在类内定义的时候，打此函数名默认调用的是本身的成员函数；如果要调用同名的全局函数时，就必须打上::以示区别。比如在VC里，你可以在调用API函数时，在API函数名前加::</p>

</section>


    <footer class="article-footer">
    
    <section class="article-tags">
        
            <a href="/tags/%E4%BB%A3%E7%A0%81/">代码</a>
        
    </section>


    
    <section class="article-copyright">
        <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-copyright" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <circle cx="12" cy="12" r="9" />
  <path d="M14.5 9a3.5 4 0 1 0 0 6" />
</svg>



        <span>Licensed under CC BY-NC-SA 4.0</span>
    </section>
    </footer>


    
</article>

    

    

     
    
        
    

    <footer class="site-footer">
    <section class="copyright">
        &copy; 
        
            2020 - 
        
        2023 梅鲁梅鲁梅鲁梅~
    </section>
    
    <section class="powerby">
        Built with <a href="https://gohugo.io/" target="_blank" rel="noopener">Hugo</a> <br />
        Theme <b><a href="https://github.com/CaiJimmy/hugo-theme-stack" target="_blank" rel="noopener" data-version="3.13.0">Stack</a></b> designed by <a href="https://jimmycai.com" target="_blank" rel="noopener">Jimmy</a>
    </section>
</footer>


    
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

    
    <div class="pswp__bg"></div>

    
    <div class="pswp__scroll-wrap">

        
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>

        
        <div class="pswp__ui pswp__ui--hidden">

            <div class="pswp__top-bar">

                

                <div class="pswp__counter"></div>

                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

                <button class="pswp__button pswp__button--share" title="Share"></button>

                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

                
                
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                        <div class="pswp__preloader__cut">
                            <div class="pswp__preloader__donut"></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div>
            </div>

            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>

        </div>

    </div>

</div><script 
                src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.js"integrity="sha256-ePwmChbbvXbsO02lbM3HoHbSHTHFAeChekF1xKJdleo="crossorigin="anonymous"
                defer
                >
            </script><script 
                src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe-ui-default.min.js"integrity="sha256-UKkzOn/w1mBxRmLLGrSeyB4e1xbrp4xylgAWb3M42pU="crossorigin="anonymous"
                defer
                >
            </script><link 
                rel="stylesheet" 
                href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/default-skin/default-skin.min.css"crossorigin="anonymous"
            ><link 
                rel="stylesheet" 
                href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.css"crossorigin="anonymous"
            >

            </main>
    <aside class="sidebar right-sidebar sticky">
        
            
                
    <section class="widget archives">
        <div class="widget-icon">
            <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-hash" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
  <path stroke="none" d="M0 0h24v24H0z"/>
  <line x1="5" y1="9" x2="19" y2="9" />
  <line x1="5" y1="15" x2="19" y2="15" />
  <line x1="11" y1="4" x2="7" y2="20" />
  <line x1="17" y1="4" x2="13" y2="20" />
</svg>



        </div>
        <h2 class="widget-title section-title">Table of contents</h2>
        
        <div class="widget--toc">
            <nav id="TableOfContents">
  <ol>
    <li><a href="#cpp返回值和传参的区别">cpp返回值和传参的区别</a></li>
    <li><a href="#cpp的继承重载重写多态">cpp的继承,重载,重写,多态</a></li>
    <li><a href="#conan使用">conan使用</a></li>
    <li><a href="#qmake的学习与使用">qmake的学习与使用</a></li>
    <li><a href="#cmake学习与使用">cmake学习与使用</a></li>
    <li><a href="#g编译器">g++编译器</a>
      <ol>
        <li><a href="#生成库文件并编译">生成库文件并编译</a></li>
      </ol>
    </li>
    <li><a href="#反编译">反编译</a></li>
    <li><a href="#gdb调试器">gdb调试器</a></li>
    <li><a href="#vscode的使用">vscode的使用</a></li>
    <li><a href="#基本语法">基本语法</a></li>
    <li><a href="#变量及类型">变量及类型</a></li>
    <li><a href="#常量两种方式">常量(两种方式)</a></li>
    <li><a href="#存储类">存储类</a></li>
    <li><a href="#枚举类">枚举类</a></li>
    <li><a href="#运算符">运算符</a></li>
    <li><a href="#lambda">Lambda</a></li>
    <li><a href="#指针">指针</a></li>
    <li><a href="#引用">引用</a></li>
    <li><a href="#c面向对象">c++面向对象</a></li>
    <li><a href="#构造函数和析构函数">构造函数和析构函数</a></li>
    <li><a href="#命名空间">命名空间</a>
      <ol>
        <li><a href="#stdmap和stdunordered_map">std::map和std::unordered_map</a></li>
        <li><a href="#list和vetor的区别">list和vetor的区别</a></li>
      </ol>
    </li>
    <li><a href="#vector迭代器失效的几种情况">vector迭代器失效的几种情况</a></li>
    <li><a href="#冒号的用法">冒号的用法</a></li>
  </ol>
</nav>
        </div>
    </section>

            
        
    </aside>


        </div>
        <script 
                src="https://cdn.jsdelivr.net/npm/node-vibrant@3.1.6/dist/vibrant.min.js"integrity="sha256-awcR2jno4kI5X0zL8ex0vi2z&#43;KMkF24hUW8WePSA9HM="crossorigin="anonymous"
                
                >
            </script><script type="text/javascript" src="/ts/main.js" defer></script>
<script>
    (function () {
        const customFont = document.createElement('link');
        customFont.href = "https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700&display=swap";

        customFont.type = "text/css";
        customFont.rel = "stylesheet";

        document.head.appendChild(customFont);
    }());
</script>

    </body>
</html>
